/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package algrt;

import java.awt.Color;
import java.awt.image.BufferedImage;
import java.text.DecimalFormat;

/**
 *
 * @author Damn
 */
public class Comparador {


    public String comparar(int[] frmOrig, int [] frmTest){
    int coincidentes=0;
    int cercanos=0;
    int excedentes=0;
    double rateVeracidad=0;
    
    //para evitar fuera de bordes
        for (int i=1;i<frmOrig.length-1;i++){
            if (frmOrig[i]!=Color.white.getRGB() && frmTest[i]!=Color.white.getRGB()
                 && frmOrig[i]==frmTest[i] ){
                coincidentes++;
            }else{
                if (frmTest[i]!=Color.white.getRGB() &&
                     frmOrig[i-1]==frmTest[i] /*|| frmOrig[i+1]==frmTest[i]*/){
                    cercanos++;
                } else{// no coinciden en nada
                    if (frmTest[i]!=Color.white.getRGB() &&
                         frmOrig[i]==Color.white.getRGB() 
                         && frmOrig[i+1]==Color.white.getRGB()
                         && frmOrig[i-1]==Color.white.getRGB()
                         )
                        excedentes++;
                }
            }
        }

    rateVeracidad=((coincidentes+0.75*cercanos-0.25*excedentes)/(coincidentes+cercanos+excedentes))*100;
    String estado="";
    if (rateVeracidad>=70) estado="AUTENTICA";
    else
        estado="FALSA";
    //fin
    String respuesta="";
    respuesta+="Coincidentes:  "+coincidentes;
    respuesta+="\nCercanos:   "+cercanos;
    respuesta+="\nErroneos: "+excedentes;
    respuesta+="\nRate Similitud:  "+ String.format("%0,2f",rateVeracidad);
    respuesta+="\nResultado:  "+ estado;

    return respuesta;
    }



    public int[] compararRGBZonas(BufferedImage frmOrig, BufferedImage frmTest){
    int w=0;
    int h=0;

    w=frmOrig.getWidth();
    h=frmOrig.getHeight();

    int [] tRgbFOrig= new int[w*h];
    int [] tRgbFTest= new int[w*h];
    int [] sRGBFOrig=frmOrig.getRGB(0, 0, w, h, tRgbFOrig, 0   ,w);
    int [] sRGBFTest=frmTest.getRGB(0, 0, w, h, tRgbFTest, 0   ,w);

    int [] tRGBResult= new int[w*h];

    //para evitar fuera de bordes
        for (int i=0;i<sRGBFOrig.length;i++){
            if (tRgbFTest[i]==Color.white.getRGB() && tRgbFOrig[i]==Color.white.getRGB())
                tRGBResult[i]=Color.GREEN.getRGB();
            else
            tRGBResult[i]=tRgbFOrig[i]^tRgbFTest[i];
        }

   
    return tRGBResult;
    }


    public String obtenerResultadosCompar(int[] frmOrig){
    int w=0;
    int h=0;
    String respuesta="";
    int nNegro=0;
    int nRojo=0;
    int nAzul=0;
    int nBlanco=0;
    double rateVeracidad=0;
    int verde=0;
    //para evitar fuera de bordes
  
        for (int i=0;i<frmOrig.length;i++){
            if (frmOrig[i]==0){
                nNegro++;
            }else if (frmOrig[i]==16711680){
                nRojo++;
            }else if (frmOrig[i]==255){
                nAzul++;
            }else if (frmOrig[i]==16777215){
                nBlanco++;
            }
        }

    rateVeracidad=((nNegro+0.80*nRojo+0.27*nAzul-0.3*nBlanco/2)/(nRojo+nAzul+nNegro+nBlanco/2))*100;
    String estado="";
    if (rateVeracidad>=70) estado="AUTENTICA";
    else
        estado="FALSA";
    //fin
    respuesta+="Coincidentes:  "+nNegro;
    respuesta+="\nCercanos:   "+(nAzul+nRojo);
    //respuesta+="\nErroneos: "+nBlanco;
    respuesta+="\nRate Similitud:  "+ String.format("%0,2f",rateVeracidad);
    respuesta+="\nResultado:  "+ estado;

    return respuesta;

    }
}
